#ifndef _BITREE_H
#define _BITREE_H

typedef struct BiTNode
{
    char data;
    BiTNode *lchild, *rchild;
} * BiTree;

// 二叉树遍历
void PreOrder(BiTree T); // 递归方式
void InOrder(BiTree T);
void PostOrder(BiTree T);
void PreOrderNonRecursive(BiTree T); // 非递归方式
void InOrderNonRecursive(BiTree T);
void PostOrderNonRecursive(BiTree T);
void LevelOrder(BiTree T); // 层次遍历
void Visit(BiTree node);   // 访问节点

void printTree(BiTree n, int type, int level); // 直观打印二叉树

/*
 * 打印二叉树
 * type : 0表示根节点，１表示左节点，２表示右节点
 * level表示层次，用于控制显示的距离
 */
void printTree(BiTree n, int type, int level)
{
    int i;

    if (NULL == n)
        return;

    printTree(n->rchild, 2, level + 1);
    switch (type)
    {
    case 0:
        printf("%2c\n", n->data);
        break;
    case 1:
        for (i = 0; i < level; i++)
            printf("\t");
        printf("\\ %2c\n", n->data);
        break;
    case 2:
        for (i = 0; i < level; i++)
            printf("\t");
        printf("/ %2c\n", n->data);
        break;
    }
    printTree(n->lchild, 1, level + 1);
}

#endif